
/**
 * 判断是否是正确的经纬度
 * @param {Number} lng - 经度
 * @param {Number} lat - 纬度
 * @returns {Boolean} 是否为有效经纬度
 */
export function isValidCoordinate(lng, lat) {
    // 检查参数是否为数字
    if (typeof lng !== 'number' || typeof lat !== 'number' || isNaN(lng) || isNaN(lat)) {
        return false;
    }
    
    // 检查经度范围（-180 到 180）
    // 检查纬度范围（-90 到 90）
    return lng >= -180 && lng <= 180 && lat >= -90 && lat <= 90;
}

/**
 * 判断经纬度是否在中国内部（基于矩形边界的简单判断）
 * @param {Number} lng - 经度
 * @param {Number} lat - 纬度
 * @returns {Boolean} 是否在中国内部
 */
export function isCoordinateInChina(lng, lat) {
    // 首先检查是否为有效经纬度
    if (!isValidCoordinate(lng, lat)) {
        return false;
    }
    const minLng = 73.55;
    const maxLng = 135.08;
    const minLat = 3.86;
    const maxLat = 53.55;
    if (lng < minLng || lng > maxLng || lat < minLat || lat > maxLat) {
        return false;
    }
    
    return true;
}

/**
 * 保留经纬度到六位小数
 * @param {Number|String} value - 经纬度值（数字或字符串类型）
 * @returns {Number|String} 保留六位小数后的经纬度值（保持原类型）
 */
export function formatCoordinateToSixDecimals(value) {
    // 获取原始类型
    const originalType = typeof value;
    
    // 检查参数是否有效
    if (originalType !== 'number' && originalType !== 'string') {
        return value;
    }
    
    // 将值转换为数字进行处理
    const numValue = Number(value);
    
    // 检查转换后是否为有效数字
    if (isNaN(numValue)) {
        return value;
    }
    
    // 保留六位小数并根据原始类型返回结果
    const formattedNum = Number(numValue.toFixed(6));
    return originalType === 'string' ? formattedNum.toString() : formattedNum;
}

/**
 * 格式化坐标对象中的经纬度到六位小数
 * @param {Object} coord - 包含lng和lat属性的坐标对象
 * @returns {Object} 格式化后的坐标对象
 */
export function formatCoordObjectToSixDecimals(coord) {
    if (!coord || typeof coord !== 'object') {
        return coord;
    }
    
    return {
        lng: (coord.longitude !== undefined || coord.lng !== undefined) ? formatCoordinateToSixDecimals(coord.lng || coord.longitude) : coord.lng || coord.longitude ,
        lat: (coord.latitude !== undefined || coord.lat !== undefined) ? formatCoordinateToSixDecimals(coord.lat || coord.latitude) : coord.lat || coord.latitude
    };
}

/**
 * 格式化坐标数组中的经纬度到六位小数
 * @param {Array} coords - 坐标数组，格式为[[lng1, lat1], [lng2, lat2], ...]
 * @returns {Array} 格式化后的坐标数组
 */
export function formatCoordArrayToSixDecimals(coords) {
    if (!Array.isArray(coords)) {
        return coords;
    }
    
    return coords.map(coord => {
        if (Array.isArray(coord) && coord.length >= 2) {
            return [
                formatCoordinateToSixDecimals(coord[0]),
                formatCoordinateToSixDecimals(coord[1])
            ];
        }
        return coord;
    });
}

